package com.h.forum.common.advice;

import com.h.forum.exception.ApplicationException;
import com.h.forum.pojo.response.AppResult;
import com.h.forum.common.enums.ResultCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * 处理全局异常和自定义的异常
 */
@Slf4j
@RestControllerAdvice // 使用这个注解进行捕获全局异常
public class GlobalExceptionHandler {

    /**
     * 处理自定义异常
     * @param e
     * @return
     */
    @ExceptionHandler(value = ApplicationException.class)
    public AppResult<?> applicationExceptionHandler(ApplicationException e) {
        // 打印日志信息
        log.error(e.getMessage());

        // 检验
        if (e.getErrorResult() != null) {
            // 存在错误信息，直接返回
            return e.getErrorResult();
        }

        // 非空校验
        if (e.getMessage() == null || e.getMessage().equals("")) {
            return AppResult.fail(ResultCode.ERROR_IS_NULL);
        }

        return AppResult.fail(e.getMessage());
    }

    /**
     * 处理非自定义的异常
     */
    @ExceptionHandler(value = Exception.class)
    public AppResult<?> exceptionHandler(Exception e) {
        // 打印日志信息
        log.error(e.getMessage());

        // 非空校验
        if (e.getMessage() == null || e.getMessage().equals("")) {
            return AppResult.fail(ResultCode.ERROR_IS_NULL);
        }

        return AppResult.fail(e.getMessage());
    }
}
